Рейтинговые книги
Читем онлайн Графические интерфейсы пользователя Java - Тимур Сергеевич Машнин

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 29 30 31 32 33 34 35 36 37 ... 59
CSS-правила платформы JavaFX, имеют префикс -fx- и соответствуют некоторым свойствам CSS-спецификации или ее расширениям.

Другой способ использования CSS-стилей для изменения внешнего вида по умолчанию узла графа сцены – это применение метода setStyle класса Node, содержащего в качестве аргумента строку блока объявлений CSS-правила.

Переключатель CheckBox

Компонент CheckBox создается с помощью конструктора, в котором указывается метка переключателя.

Метку также можно установить методом setText.

А первоначальный выбор переключателя можно установить методом setSelected (true).

С помощью метода setIndeterminate (true) можно установить неопределенное состояние выбора переключателя.

И метод setAllowIndeterminate (true) добавляет это неопределенное состояние к двум другим состояниям выбора переключателя.

Таким образом, у переключателя появляются три состояния.

Отличие набора свойств компонента CheckBox от набора свойств компонента Button заключается в наличии свойств indeterminate, selected и allowIndeterminate.

У компонента CheckBox есть метод selectedProperty, который возвращает свойство состояния выбора переключателя.

И метод indeterminateProperty, который возвращает свойство неопределенного состояния переключателя.

К этим свойствам можно присоединить слушателя изменения свойства.

И о свойствах JavaFX компонентов мы поговорим далее.

Компоненты JavaFX Beans и связывание данных

Платформа Java определяет JavaBeans-компоненты, которые используются для передачи данных.

JavaBeans-компоненты представлены Java-классами, которые созданы по определенным правилам.

Классы JavaBeans-компонентов имеют публичный конструктор без параметров, свойства класса доступны через методы get и set, классы имеют методы add и remove добавления и удаления слушателей событий, и классы обладают свойством сериализуемости (преобразования в последовательность байт и обратно) путем реализации интерфейса java.io.Serializable.

Кроме того, платформа Java содержит программный интерфейс JavaBeans API для создания и обработки JavaBeans-компонентов.

Все Swing и AWT компоненты являются идеальными JavaBeans компонентами.

JavaFX компоненты не являются классическими JavaBeans компонентами, так как они не реализуют интерфейс Serializable.

Сериализация JavaFX компонентов возможно через декларативное FXML описание интерфейса, с которым мы познакомимся позже.

Однако платформа JavaFX расширяет JavaBeans-модель, определяя JavaFX-свойства.

И именно JavaFX-свойства используют JavaFX компоненты.

JavaFX-свойства реализованы пакетами beans, beans.binding, beans.property и beans.value программного интерфейса JavaFX API.

Конечной реализацией JavaFX-свойств являются классы пакета beans.property SimpleХХХProperty для свойств записи и чтения и классы ReadOnlyХХХWrapper для свойств только чтения.

Данные классы реализуют интерфейсы Observable, Property, ReadOnlyProperty, ObservableValue и WritableValue, предоставляя методы:

addListener и removeListener присоединения и удаления слушателей недействительности и изменения значения свойства.

Методы bind, bindBidirectional, unbind и unbindBidirectional связывания и удаления связывания значения свойства.

Методы getBean и getName, возвращающий объект JavaFX Beans-компонента, содержащего свойство, и возвращающий имя свойства;

Методы get и set чтения и записи значения свойства.

Кроме того, данные классы расширяют классы XXXExpression пакета beans.binding, обеспечивающие для JavaFX-свойств методы создания объектов XXXBinding, которые представляют выражения, результат которых синхронизирован со значением данного свойства и со значением объекта, выступающим в качестве аргумента вышеупомянутых методов.

Таким образом, JavaFX Beans-компонент представлен классом, имеющим:

Во-первых, публичный конструктор без параметров.

Во-вторых методы get () и set () доступа к свойствам класса.

И в-третьих методы xxxProperty (), возвращающие JavaFX-свойства.

В качестве примера рассмотрим компонент Button.

Класс Button имеет унаследованные от класса Node свойства, унаследованное от класса Parent свойство, унаследованные от класса Control свойства, унаследованные от класса Labeled свойства, унаследованные от класса ButtonBase свойства, и собственные свойства.

Какие-то из этих свойств доступны для чтения и записи, а какие-то – только для чтения.

Для каждого свойства чтения и записи класс Button предоставляет методы доступа get и set, а для свойства только чтения – только метод get, а также метод xxxProperty, возвращающий само JavaFX-свойство ХХХProperty или ReadOnlyХХХProperty.

Рассмотрим свойство text класса Button.

Метод textProperty кнопки Button возвращает JavaFX-свойство StringProperty, определяющее значение свойства text.

Установить значение данного JavaFX-свойства и соответственно значение свойства text кнопки Button можно методом set интерфейса WritableObjectValue или методом setValue класса StringProperty.

Возвращает значение свойства text кнопки Button метод get интерфейса ObservableObjectValue или метод getValue класса StringExpression.

При этом методы getBean и getName вернут класс Button и имя свойства text.

Применяя метод bind интерфейса Property к JavaFX-свойству текста кнопки Button можно связать его значение, например, со значением JavaFX-свойства текста поля TextField так, что, набирая текст в поле TextField, он будет автоматически становиться текстом кнопки Button.

Когда объекты участвуют в связывании, изменения, внесенные в один объект, будут автоматически отражаться в другом объекте.

Связывание собирается из одного или нескольких источников, известных как зависимости.

Связывание просматривает список зависимостей для изменений, а затем автоматически обновляется после обнаружения каких-либо изменений.

Применяя метод bindBidirectional класса StringProperty к JavaFX-свойству текста кнопки Button можно связать его значение, например, со значением JavaFX-свойства текста поля TextField так, что в нем будет автоматически отображаться измененный текст кнопки Button.

Организовать прослушивание изменения значения JavaFX-свойства текста кнопки Button позволяет метод addListener интерфейса ObservableValue.

JavaFX-свойства поддерживают отложенные вычисления своих значений, т.е. значение JavaFX-свойства пересчитывается не сразу после своего изменения, а только тогда, когда это значение на самом деле запрашивается.

И в промежутке между изменением значения и его пересчетом генерируется событие недействительности значения.

Метод addListener (InvalidationListener listener) интерфейса Observable позволяет организовать прослушивание недействительности значения JavaFX-свойства текста кнопки Button.

В этом примере при нажатии кнопки Button возникнет событие недействительности значения JavaFX-свойства текста.

Так как JavaFX-свойство StringProperty текста кнопки Button расширяет класс StringExpression, его методы позволяют организовать различного рода связанные вычисления.

В этом примере, при вводе текста в поле field1, вводимый текст соединяется с текстом кнопки, и результат отображается в поле field2.

В JavaFX приложениях также можно использовать самостоятельные JavaFX-свойства, безотносительно к JavaFX-компонентам.

Для этого необходимо создавать экземпляры классов SimpleХХХProperty пакета beans.property.

Так как данные классы расширяют классы XXXExpression пакета beans.binding, при этом можно создавать связанные вычисления.

Для создания связанных вычислений платформа JavaFX предлагает два типа программного интерфейса – High-Level Binding API и Low-Level Binding API.

Программный интерфейс High-Level Binding API также подразделяется на Fluent API и на применение класса Bindings.

Fluent API предоставляет методы для объектов, тогда как класс Bindings использует статические фабричные методы.

Здесь приведен пример использования Fluent API.

В этом примере, в поле TextField отобразится сумма значений двух JavaFX-свойств SimpleDoubleProperty.

Здесь приведен пример использования класса Bindings для создания связанных вычислений.

В этом примере, в поле TextField также отобразится сумма значений двух JavaFX-свойств SimpleDoubleProperty.

Здесь приведен пример использования Low-Level Binding API для создания связанных вычислений.

Для применения Low-Level Binding API необходимо расширять классы ХХХBinding пакета beans.binding с переопределением их метода computeValue.

Здесь

1 ... 29 30 31 32 33 34 35 36 37 ... 59
На этой странице вы можете бесплатно читать книгу Графические интерфейсы пользователя Java - Тимур Сергеевич Машнин бесплатно.

Оставить комментарий